大家好,今天是第二天 ~
之前曾經寫過 C# Task 的文章:Day 15: C# 多工處理: Task - iT 邦幫忙,不過裡面示範的程式沒有回傳資料,今天來看看如何在 Task 中回傳資料。
首先看第一個範例,建立泛型的 Task 類別,並在 Lambda 運算式裡回傳結果。
///<summary> 物品類別 </summary>
class Item
{
public string? Name { get; set; }
public int ID { get; set; }
}
///<summary> 執行程式 </summary>
public void Run(){
// 以 Lambda 運算式建立 Task
Task<Item> task3 = Task<Item>.Factory.StartNew(() =>
{
string s = "Printer";
int id = 15;
return new Item {ID = id, Name = s};
});
Item printer = task3.Result; // 取得 Task 執行結果
Console.WriteLine($"{printer.ID}-{printer.Name}");
}
再來是不用 Lambda 運算式,撰寫 Task 所需的方法:
///<summary> 物品類別 </summary>
class Item
{
public string? Name { get; set; }
public int ID { get; set; }
}
/// <summary> 建立新物品 </summary>
private Item NewItem(){
Item newItem = new Item();
newItem.ID = 30;
newItem.Name = "Mouse";
return newItem;
}
///<summary> 執行程式 </summary>
public void Run(){
Task<Item> task4 = new Task<Item>(NewItem); // 傳入方法建立 Task
task4.Start();
Item mouse = task4.Result; // 取得 Task 執行結果
Console.WriteLine($"{mouse.ID}-{mouse.Name}");
}
參考資料:How to: Return a Value from a Task